/*
 * Università degli Studi di Trento
 * Facoltà di Scienze MM.FF.NN.
 * Corso di Laurea Triennale in Informatica
 * A.A. 2010/2011
 * Progetto per il corso di Sistemi Operativi 1
 * Progetto 4: simulazione di una rotonda
 * Autori:
 *  Abram Lorenzo - 140368
 *  Dal Lago Loris - 139428
 *  Florio Alessandro - 140245
 */

/********************************************************************************
  Contiene i prototipi delle funzioni e gli enum che verranno utilizzati
  nella struct Car.

  Contiene anche il tipo ptrCar che ha quindi visibilita' pubblica
********************************************************************************/

#ifndef CAR_H
#define CAR_H

#include "common.h"

typedef enum {
	ERROR_PLACE = -1, MESIANO = 0, VILLAZZANO=1, POVO=2, IRST=3
} Place;


typedef enum {
	ERROR_TYPOLOGY = -1, VELOCE = 1, LENTA, LENTISSIMA /* Velocita' espressa in secondi per settore */
} Typology;


typedef enum {
  ARRIVAL,		/* Arrivo in coda dell'auto */
  ENTER,		/* Entrata in rotatoria dell'auto */
  IN_SECTOR,	        /* Cambio del settore */
  EXIT,			/* Uscita dalla rotatoria */
  LEAVING               /* Allontanamento dell'auto dalla rotatoria */
} EventCode;


typedef struct SCar * ptrCar; 

ptrCar Car_create(char* targa, long bautArrivalTime, Place partenza, Place destinazione, Typology tipologia);
void Car_move (ptrCar);
void Car_destroy(ptrCar);

char * Car_placeToString(Place);
Place Car_stringToPlace(char *);
Typology Car_stringToType(char *);

ptrCar Car_copy(ptrCar);

/* Getty Methods */
char * Car_getTag(ptrCar);
int Car_getSpeed(ptrCar);
int Car_getPos(ptrCar);
int Car_getPrevPos(ptrCar);
long Car_getBautArrivalTime(ptrCar);
time_t Car_getSectArrivalTime(ptrCar);
long Car_getSectStayTime(ptrCar);
Place Car_getStartPoint(ptrCar);
Place Car_getDestPoint(ptrCar);
Typology Car_getType(ptrCar);
EventCode Car_getEvent(ptrCar);
char * Car_getStartPointStr(ptrCar);
char * Car_getDestPointStr(ptrCar);

#ifdef DEBUG
void Car_printf (ptrCar);
#endif /* DEBUG */

#endif /*CAR_H*/
